// electron/mian.js
const { app, BrowserWindow ,ipcMain,Menu} = require("electron");
const path = require("path");
const isDev = process.env.IS_DEV == "true" ? true : false;
const fs = require("fs");

//硬件加速
app.commandLine.appendSwitch('ignore-gpu-blacklist');
app.commandLine.appendSwitch('enable-gpu-rasterization');
 
let mainWindow;
function createWindow() {
  //创建浏览器窗口。
   mainWindow = new BrowserWindow({
    width: 480,
    height: 480,
    title:"云盘",
    show:false,
    webPreferences: {
      preload: path.join(__dirname, "preload.js"),
      contextIsolation: true,//是否开启隔离上下文
      nodeIntegration: true,//渲染进程使用node api
      webSecurity: false,
      webgl: true,
      offscreen: false,
      enableRemoteModule: false
    },
  });
 
// 加载 index.html
  mainWindow.loadURL(
    isDev
      ? "http://localhost:5173"
      : `file://${path.join(__dirname, "../dist/index.html")}`
  );
    // 是否打开开发工具
  if (isDev) {
    // mainWindow.webContents.openDevTools();
  }
   // 在 ready-to-show 事件中显示窗口
   mainWindow.once('ready-to-show', () => {
    mainWindow.show();
  });
  // 监听登录成功事件
  ipcMain.on('login-success', () => {
    if(mainWindow){
      // 调整窗口大小
      mainWindow.setSize(1000, 800);
      //窗口居中
      mainWindow.center();
    }
    
  });
   // 监听来自渲染进程的 'logout' 事件
   ipcMain.on('logout', () => {
    // 在这里执行主进程需要执行的操作，例如调整窗口大小
    if (mainWindow) {
      mainWindow.setSize(480, 480);
      mainWindow.center();
    }
  });
}

// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
  createWindow();
 
  app.on("activate", function () {
     // 通常在 macOS 上，当点击 dock 中的应用程序图标时，如果没有其他
    // 打开的窗口，那么程序会重新创建一个窗口。
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});
 // 禁用软件回退模式（可选）
 app.disableHardwareAcceleration(false);

// 除了 macOS 外，当所有窗口都被关闭的时候退出程序。 因此，通常对程序和它们在
// 任务栏上的图标来说，应当保持活跃状态，直到用户使用 Cmd + Q 退出。
app.on("window-all-closed", () => {
  if (process.platform !== "darwin") {
    app.quit();
  }
});
//不显示菜单
Menu.setApplicationMenu(null);
ipcMain.handle("getDirectoryContent", (event, directoryPath) => {
  return new Promise((resolve, reject) => {
    fs.readdir(directoryPath, (err, filesList) => {
      if (err) {
        reject(err);
        return;
      }
      resolve(filesList);
    });
  });
});